package com.molin.binarySearchTest;
/*
1.定义两个变量，表示要查找的范围。默认min=0，max=最大索引
2.循环查找，但是min<=max
3.计算出mid的值
4.判断mid位置的元素是否要查找的元素，如果是直接返回对应的索引
5.如果要查找的值在左半边，那么min值不变，max=mid-1,继续下次循环查找
6.如果要查找的值在右半边，那么max值不变，min=mid+1，继续下次循环查找
7.当min>max时，表示要查找的元素在数组中不存在，返回-1
*/
public class MyBinarySearchDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int number = 3;
        int index = bindSearchForIndex(arr, number);
        System.out.println(index);
    }

    private static int bindSearchForIndex(int[] arr, int number) {
        //定义查找范围
        int min = 0;
        int max = arr.length - 1;

        //循环查找，条件min<=max
        while (min <= max) {
            //中间位置
            int mid = (min + max) / 2;
            //arr[mid]>number，代表要查找的元素在左边。
            if (arr[mid] > number) {
                max = mid - 1;
            } else if (arr[mid] < number) {
                //arr[mid]<number，代表要查找的元素在右边
                min = mid + 1;
            } else if (arr[mid] == number) {
                //arr[mid]==number
                return mid;
            }
        }
        return -1;
    }
}
